module fileCreator #(
    parameter Index = 0
)(
    input wire clk,
    input wire rst,
    input wire date_en,
    input wire [31:0] data_in,
    output reg [31:0] data_out
);

    reg [31:0] memory [0:511];
    integer i;
    integer file_descriptor;  // 文件描述�?
    integer num = 1;// 文件�?
    reg [63:0] total_cycles; // 使用64位计数器来避免溢出
    reg [63:0] date_en_cycles; // 记录date_en拉高的时间

    always @(posedge clk) begin
        if (rst) begin
            i = 0;
            date_en_cycles <= 0;
            total_cycles <= 0;
        end
        else begin
            if (date_en) begin
                data_out <= data_in;
                memory[i] <= data_in;
                i <= i + 1;
                date_en_cycles <= date_en_cycles + 1;
            end

            if (date_en==0 && i>0) begin  // 只有在数据有效且有数据存储时操作
                // 生成文件�?"data_packet_<num>.bin"
                // 生成文件名和路径
                string file_path;
                $sformat(file_path, "C:/Users/hias-315/Desktop/HighSpeedFlow/work/%0d/out/data_packet_%0d.bin", Index, num);

                num++;
                file_descriptor = $fopen(file_path, "w");  // 打开新文�?

                if (file_descriptor == 0) begin
                    $display("Failed to open file.");
                    $finish;
                end

                for (integer j = 0; j < i; j = j + 1) begin  // 写入 memory 中的数据
                    $fwrite(file_descriptor, "%h ", memory[j]);
                end

                $fclose(file_descriptor);  // 关闭文件
                i = 0;  // 重置计数�?
            end

            total_cycles <= total_cycles + 1;
        end
    end

    // 在模块结束时计算比例
    always @(negedge clk) begin
        if (total_cycles % 5000 == 0) begin
            real proportion; // 使用实数来计算比例
            proportion = ($bitstoreal(date_en_cycles) / $bitstoreal(total_cycles)) * 100.0; // 转换为百分比
            $display("Module Index %0d: Proportion of time date_en is high: %f%%", Index, proportion);
        end
    end
endmodule